package P113_NotFinallyDealReturnParams;

import org.junit.Test;

import java.util.ArrayList;
import java.util.List;
import java.util.zip.DataFormatException;

/**
 * @ClassName : NotFinallyDealReturnParams
 * @Description : 不要在finally块中处理返回值
 * @Author : wukj1
 * @Date: 2022/5/4
 **/
public class NotFinallyDealReturnParams {

    @Test
    public void test(){

//        try{
//            System.out.println(doStuff(-1));
//            System.out.println(doStuff(100));
//        }catch (Exception e){
//            System.out.println("这里永远都不会到达的");
//        }

//        System.out.println(doStuff());
//
        doSomething().forEach(System.out::println);

    }

    public static int doStuff(int p){
      try{
          if(p < 0){
              throw new DataFormatException("数据格式错误");
          }else{
                return p;
          }
      }catch (Exception e){
            throw e;
      }finally {
          //告诉JVM该方法可以正常返回
          return -1;
      }
    }

    //返回的值是基本类型（值拷贝）
    public static int doStuff(){
        int a = 1;
        try {
            return a;
        } catch (Exception e) {
        }finally{
            //重新修改一下返回值
            a = -1;
        }
        return 0;
    }

    //返回的值是引用类型（引用）
    public static List<String> doSomething(){
        List<String> list = new ArrayList<>();
        list.add("A");
        try {
            return list;
        } catch (Exception e) {
        }finally {
            list.add("B");
        }
        list.add("C");
        return list;
    }

}
